#-*- codeing = utf-8 -*-
#@Time : 2020/10/29 12:15
#@Author : 阳某
#@File : sorted.py
#@Software : PyCharm

'''
sorted函数用于对数据排序

sorted(iterable[, key][, reverse])

sorted函数有三个参数：

iterable：必选，待排序的集合，可以是list、tuple、set、dict等
reverse：可选，默认是False升序排列，如果为True则降序排列
key：可选，这是一个函数，返回一个key，用于排序的比较
注意：sorted函数不会修改原始列表，而是会返回新的列表

官方文档：https://docs.python.org/zh-cn/3/howto/sorting.html

'''
# 简单排序
print(sorted([5,3,2,8,0,1]))

# 简单的降序排列
print(sorted([5,3,2,8,0,1],reverse=True))

# 使用key按照字符串长度排序
fruits = ['lime', 'blueberry', 'plum', 'avocado']
# 对于字符串，默认是按字母排序
print(sorted(fruits))
# 按照每个元素的长度排序
print(sorted(fruits,key=lambda x:len(x)))
# 因为key要求是一个函数，可以简写一下
print(sorted(fruits,key=len))

# 对于元组的列表进行排序
# 比如这个列表可能是从文件读取后的
student_tuples = [
    ('john', 'boy', 15),
    ('jane', 'girl', 12),
    ('dave', 'boy', 10)
]
# 按照元组的第三个元素，年龄进行排序
print(sorted(student_tuples,key=lambda student:student[2]))

# 对字典列表排序
student_dicts = [
    {"name":'john', "sex":'boy', "age":15},
    {"name":'jane', "sex":'girl', "age":12},
    {"name":'dave', "sex":'boy', "age":10}
]
print(sorted(student_dicts,key=lambda student:student['age']))

student_dicts = {
    'john': {"sex":'boy', "age":15},
    'jane': {"sex":'girl', "age":12},
    'dave': {"sex":'boy', "age":10}
}

# 注意：字典本身是无序的，所以只能先转成有序列表
# 这样只能对字典的key排序
print(sorted(student_dicts))
# 先获取key-value的列表形式
student_dicts_items = student_dicts.items()
print(student_dicts_items)
# 字电脑是无序的
print(dict(student_dicts_items))
